/**
 * 短信验证码服务
 * 封装验证码验证逻辑，方便统一管理
 */

const cloud = require('wx-server-sdk')
const Logger = require('../utils/logger')
const config = require('../config/config')

class SmsService {
  constructor() {
    this.cloud = cloud
  }

  /**
   * 验证验证码
   * @param {string} phone 手机号
   * @param {string} code 验证码
   * @param {string} type 类型 login | register
   * @returns {Promise<boolean>} 是否验证成功
   */
  async verifyCode(phone, code, type = 'login') {
    Logger.info('SmsService', '验证验证码', { phone, type })

    try {
      // 调用SMS云函数验证
      const result = await this.cloud.callFunction({
        name: 'sms',
        data: {
          action: 'verifyCode',
          data: { phone, code, type }
        }
      })

      Logger.info('SmsService', '验证码验证结果', result.result)

      if (result.result && result.result.success) {
        return true
      } else {
        const errorMsg = result.result?.message || '验证码错误'
        throw new Error(errorMsg)
      }
    } catch (error) {
      Logger.error('SmsService', '验证码验证失败', error)
      
      // 如果是调用SMS云函数失败，检查是否是开发环境
      if (config.env === 'development') {
        Logger.warn('SmsService', '开发环境：使用固定验证码123456')
        if (code === '123456') {
          return true
        } else {
          throw new Error('开发环境验证码错误（固定为123456）')
        }
      }
      
      throw new Error(error.message || '验证码验证失败')
    }
  }

  /**
   * 发送验证码
   * @param {string} phone 手机号
   * @param {string} type 类型 login | register
   * @returns {Promise<object>} 发送结果
   */
  async sendCode(phone, type = 'login') {
    Logger.info('SmsService', '发送验证码', { phone, type })

    try {
      const result = await this.cloud.callFunction({
        name: 'sms',
        data: {
          action: 'sendCode',
          data: { phone, type }
        }
      })

      Logger.info('SmsService', '验证码发送结果', result.result)

      return result.result
    } catch (error) {
      Logger.error('SmsService', '发送验证码失败', error)
      throw error
    }
  }
}

module.exports = SmsService

